package org.dromara.common.core.utils;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.i18n.LocaleContextHolder;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：获取i18n资源文件
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class MessageUtils {

    /**
     * 取MessageSource单例，用于国际化消息的管理
     * 使用SpringUtils工具类直接获取Spring上下文中的MessageSource实例
     * 说明：这里使用Spring的依赖注入特性，直接获取需要的Bean实例
     */
    private static final MessageSource MESSAGE_SOURCE = SpringUtils.getBean(MessageSource.class);

    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值 返回找到的消息字符串如果没有找到，则返回消息代码
     */
    public static String message(String code, Object... args) {
        try {
            // 尝试从消息资源中获取对应代码的消息，并进行参数替换
            return MESSAGE_SOURCE.getMessage(code, args, LocaleContextHolder.getLocale());
        } catch (NoSuchMessageException e) {
            return code;
        }
    }
}
